"""
租户相关的工具函数
"""
from flask import g
from contextlib import contextmanager


@contextmanager
def skip_tenant_auto_set():
    """
    上下文管理器，在此上下文中跳过自动设置租户ID
    
    使用示例：
    with skip_tenant_auto_set():
        # 在这里创建的对象不会自动设置tenant_id
        tenant = Tenant(name="新租户")
        db.session.add(tenant)
    """
    original_skip = getattr(g, 'skip_tenant_auto_set', False)
    g.skip_tenant_auto_set = True
    try:
        yield
    finally:
        g.skip_tenant_auto_set = original_skip


@contextmanager
def with_tenant_id(tenant_id):
    """
    上下文管理器，在此上下文中使用指定的租户ID
    
    使用示例：
    with with_tenant_id(123):
        # 在这里创建的对象会使用租户ID 123
        user = User(name="用户")
        db.session.add(user)
    """
    original_tenant_id = getattr(g, 'tenant_id', None)
    g.tenant_id = tenant_id
    try:
        yield
    finally:
        g.tenant_id = original_tenant_id


def set_tenant_id_manually(obj, tenant_id):
    """
    手动为对象设置租户ID
    
    参数:
        obj: 数据库模型实例
        tenant_id: 租户ID
    """
    if hasattr(obj, 'tenant_id'):
        obj.tenant_id = tenant_id


def get_current_tenant_id():
    """
    获取当前请求的租户ID
    
    返回:
        int: 租户ID，如果没有则返回None
    """
    return getattr(g, 'tenant_id', None)


def is_super_admin():
    """
    检查当前用户是否为超级管理员
    
    返回:
        bool: 是否为超级管理员
    """
    return getattr(g, 'is_super_admin', False)
